package Stream流;

import javax.lang.model.element.NestingKind;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;

public class streamDemo3 {
    public static void main(String[] args) {
        /**
         *
         * filter  过滤
         * limit   获取前几个元素
         * skip     跳过前几个元素
         * distinct 元素去重,依赖(hashcode和equals方法),人工是自定义的对象必须重写hashcode和equals方法
         * concat   合并a和b两个流为一个流
         * map      转换流中的数据类型
         * 注意1: 中间方法，返回新的Stream流，原来的Stream流只能使用一次，建议使用链式编程
         * 注意2: 修改Stream流中的数据，不会影响原来集合或者数组中的数据
         */
        ArrayList<String> list=new ArrayList<String>();
        Collections.addAll(list,"张三","张三封","赵四","赵四");
        //filter 过滤器 把张开头的留下,其余数据过滤不要
        list.stream().filter(new Predicate<String>() {//方式一:匿名内部类的额形式
            @Override
            public boolean test(String s) {
                //s就依次表示stream流上的每一个数据
                return s.startsWith("张");
            }
        }).forEach(System.out::println);
        //方式二:
        list.stream().filter(s->s.startsWith("张")).forEach(System.out::println);
        System.out.println("================================");
        //limit 获取前几个元素
        list.stream().limit(2).forEach(System.out::println);
        System.out.println("================================");
        //skip 跳过前几个元素
        list.stream().skip(1).forEach(System.out::println);
        System.out.println("================================");
        //distinct 元素去重,依赖(hashcode和equals方法),人工是自定义的对象必须重写hashcode和equals方法
        list.stream().distinct().forEach(System.out::println);
        System.out.println("================================");
        //concat 合并a,b两个流
        ArrayList<String> liat1=new ArrayList<String>();
        Collections.addAll(liat1,"赵无极","李王茹");
        Stream.concat(liat1.stream(),list.stream()).forEach(System.out::println);
        System.out.println("================================");
        //map 类型装换
        ArrayList<String> liat2=new ArrayList<String>();
        Collections.addAll(liat2,"赵无极-15","李-48","陈龙-78");
       //匿名内部类:
        final String[] str = {""};
        liat2.stream().map(new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                //切割
                String[] split = s.split("-");
                str[0] =split[0];
                return Integer.parseInt(split[1]);
            }
        }).forEach(s-> System.out.println(str[0] +"年龄为:"+s));
        System.out.println("================================");
        //简化版:
        liat2.stream().map(s->Integer.parseInt(s.split("-")[1])).forEach(s->System.out.println("年龄为:"+s));

    }
}
